// src/main/java/com/yin/waimai/repository/DeliveryPersonRepository.java
package com.yin.waimai.repository;

import com.yin.waimai.enums.DeliveryPersonStatus;
import com.yin.waimai.model.DeliveryPerson;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 配送员数据访问接口
 */
@Repository
public interface DeliveryPersonRepository extends MongoRepository<DeliveryPerson, String> {

    /**
     * 根据电话号码查询配送员
     * @param phone 电话号码
     * @return 配送员 Optional
     */
    Optional<DeliveryPerson> findByPhone(String phone);

    /**
     * 根据名称查询配送员
     * @param name 配送员名称（与用户名相同）
     * @return 配送员 Optional
     */
    Optional<DeliveryPerson> findByName(String name);
    
    /**
     * 根据状态查询配送员列表
     * @param status 状态
     * @return 配送员列表
     */
    List<DeliveryPerson> findByStatus(DeliveryPersonStatus status);

    /**
     * 查询指定点附近指定距离内的配送员 (需要地理空间索引)
     * @param location 地理坐标点 (经纬度)
     * @param distance 距离 (例如 new Distance(5, Metrics.KILOMETERS) 表示 5 公里)
     * @return 附近的配送员列表
     */
    List<DeliveryPerson> findByCurrentLocationNear(Point location, Distance distance);

    /**
     * 查询指定点附近指定距离内，并且状态为指定状态的配送员
     * @param location 地理坐标点
     * @param distance 距离
     * @param status 状态 (例如 DeliveryPersonStatus.IDLE)
     * @return 附近指定状态的配送员列表
     */
    List<DeliveryPerson> findByCurrentLocationNearAndStatus(Point location, Distance distance, DeliveryPersonStatus status);
}